\subsection{Sviluppo Javascript e Perl}\label{sec:javascriptperl}
In questa sezione verranno descritti i punti salienti nello sviluppo degli script Perl e Javascript.
\subsubsection{Panoramica}

Grazie all'utilizzo di Perl, vengono create dinamicamente pagine CGI, come descritto in \ref{sec:struttura}, e vengono gestite le operazioni si inserimento,modifica e cancellazione per i file XML. 
Le pagine che contengono gli script sviluppati in Perl si possono trovare nella cartella \texttt{/cgi-bin}.

Principalmente la realizzazione degli script Perl e Javascript è stata effettuata da Stefano Tombolini e Andrea Tosatto, eccetto che per la generazione di pagine in maniera dinamica e della funzionalità di ricerca, che è stata realizzata da Christian Cardin.\\
Per poter visualizzare determinate pagine, come ad esempio quella di inserimento di un nuovo algoritmo, è necessario che l'utente abbia effettuato il login al sistema. \\
Per questo motivo, in ogni pagina che richiede questo tipo di controllo, viene effettuato, tramite Perl, una verifica dell'esistenza di una sessione e che l'email corrispondente alla sessione sia valida, cioè che l'email corrisponda a quella dell'utente loggato.
In questo modo, si ha la certezza che un utente non loggato non possa visualizzare queste pagine e, di conseguenza, che non vengano inseriti nei file XML dei nodi non validi.

\subsubsection{Amministrazione}\label{subsec:amministrazione}
Gli utenti amministratori hanno la possibilità di effettuare diverse operazioni tramite una pagina dedicata chiamata \texttt{adminPage.cgi}. Questa pagina è disponibile ai soli utenti amministratori e può essere facilmente raggiunta usando il link in alto a destra sotto il link di logout.
Le operazioni disponibili sono:
\begin{itemize}
\item Gestione Utenti;
\item Gestione FAQ;
\item Gestione Forum;
\item Gestione News.
\end{itemize}

Queste operazioni sono disponibili solo agli utenti amministratori.

\subsubsection{Gestione Utenti}\label{subsec:gestioneutenti}
La pagina di gestione utenti \texttt{User\_Management.cgi} permette di promuovere un utente ad amministratore, oppure di riportare un utente amministratore a semplice utente.
Non è mai possibile che il sito non contenga amministratori quindi, nel caso si cerchi di riportare l'ultimo utente amministratore a utente, l'azione non verrà eseguita e sarà informato l'utente dell'errore.

\subsubsection{Gestione FAQ}\label{subsec:gestionefaq}
La pagina di gestione delle FAQ \texttt{FAQ\_edit.cgi} permette l'inserimento,l'eliminazione o la modifica di domande e relative risposte. Inoltre permette le stesse operazioni ma sulle categorie. \\
Sono stati effettuati controlli sia tramite Perl che tramite Javascript in maniera tale da non poter avere categorie,domande o risposte che non abbiano caratteri all'interno. 
Quando vengono apportate nuove modifiche al file xml delle FAQ, viene aggiornata anche la data di modifica, sempre tramite lo script Perl con cui viene scritto il file.

\subsubsection{Gestione Forum}\label{subsec:gestioneforum}
La pagina di gestione del forum \texttt{Forum\_management.cgi} permette di inserire o eliminare una determinata categoria o sotto categoria.
Anche per questa parte di amministrazione vengono effettuati controlli tramite Perl e Javascript per evitare categorie o sotto categorie senza nessun carattere.

\subsubsection{Gestione News}\label{subsec:gestionenews}
La pagina di gestione delle news \texttt{news\_management.cgi} permette di inserire o eliminare una news.
Anche nella gestione delle news si è prestato attenzione all'evitare l'inserimento di news che non contenessero caratteri nel titolo o nel testo.
All'inserimento della news sul file XML corrispondente da parte di uno script Perl, viene anche aggiornata la data di ultima modifica del file.

\subsubsection{Download}\label{subsec:download}
Per poter scaricare il software l'utente dovrà essere loggato. Qualora non lo fosse, viene riportato un messaggio che lo invita a loggarsi o registrarsi. Se si prova a scaricare un file da non loggati, si viene reindirizzati alla pagina di login. L'alternativa era quella di fare il reindirizzamento alla pagina di registrazione, ma se un utente avesse già un proprio account la pagina non gli sarebbe di alcuna utilità. Al contrario, la pagina di login contiene comunque un link alla pagina di registrazione, se non fosse ancora iscritto.\\
Quando un utente loggato decide di eseguire il download, viene mandato ad una pagina di ringraziamento. In questa pagina è presente uno script che raccoglie le informazioni del file da scaricare dall'URL e fa partire automaticamente il download. Si è deciso di impostare un timeout fisso, al posto della funzione \texttt{window.onload}, in quanto quest'ultima aspetta il completo caricamento della pagina prima di avviare l'esecuzione, che potrebbe risultare un problema per le connessioni più lente.\\ Nella pagina è comunque persente un link per poter avviare il download manualmente, realizzato tramite perl.\\
\emph{Nella versione realizzata per il progetto di Tecnologie Web, i file scaricati sono semplicemente un'immagine del logo dell'Università di Padova}.

\subsubsection{Registrazione}\label{subsec:registrazione}
Nel sito realizzato, è presente una pagina tramite la quale l'utente può registrarsi. \\
Al momento della registrazione, verrà chiesto all'utente l'inserimento di un'email valida, una password, uno username, l'affiliazione di cui fa parte. Inoltre, l'utente ha la possibilità di scegliere se essere iscritto o meno alla newsletter e di inserire i valori dei campi opzionali corrispondenti al nome e al cognome e il paese da dove proviene.\\
Al momento della conferma della registrazione, è presente un controllo javascript che controlla i valori dei campi inseriti, e fa apparire un messaggio di errore qualora i dati inseriti risultassero non corretti.\\
In particolare, vengono effettuati dei controlli per accertare che siano stati riempiti tutti i campi obbligatori.\\
Qualora l'utente non avesse i javascript attivati nel browser, gli stessi controlli vengono effettuati tramite Perl nella pagina di conferma della registrazione, in modo da visualizzare messaggi di errore o confermare la registrazione.\\
Per il salvataggio della password abbiamo utilizzato una funzione che calcola il suo digest MD5 in modo che nel file XML la password non venga scritta in chiaro.\\
In fase di registrazione, sono stati vietati alcuni caratteri che potevano creare dei problemi in fase di salvataggio dell'XML. Quando l'utente inserisce uno o più di questi caratteri vietati, vengono effettuati dei controlli Javascript, e vengono visualizzati dei messaggi di errore che permetteranno di capire dov'è il problema e di correggere la stringa inserita.\\

\subsubsection{Login}\label{subsec:login}
Il sito prevede un forum, tramite il quale gli utenti possono inserire i loro algoritmi e possono votare e commentare tutti gli algoritmi.\\
Per effettuare queste operazioni, però, viene chiesto agli utenti di essere loggati all'interno del sito, in modo da poter ricavare i dati personali dell'utente e visualizzarli ove necessario.\\
Per questo motivo, il sito prevede una pagina nella quale è possibile effettuare il login.\\
In questa pagina sono presenti due campi, rappresentanti l'email e la password con i quali l'utente si è registrato nel sito. Al momento della conferma, vengono effettuati dei controlli javascript che verificano se l'utente ha inserito entrambi i campi del form. Come per la registrazione, se i javascript sono disattivati nel browser, vengono effettuati gli stessi controlli nella pagina di conferma tramite script Perl.\\
Quando l’utente inserisce le credenziali di accesso giuste, viene creata una sessione dove viene memorizzata l’email dell’utente, in modo da poter utilizzare questa informazione, ove necessario, durante la permanenza dell’utente nel sito.
Quando viene creata la sessione, viene assegnato a questa un ID univoco, che viene memorizzato all’interno di un cookie. Questo cookie permette di capire in ogni pagina del sito se l’utente è loggato o meno.\\
In ogni pagina, se l’utente è loggato, appare una scritta di benvenuto affiancata dal link per effettuare il logout che, quando viene richiamato, distrugge la sessione corrente.\\
Se invece l’utente non è loggato, appaiono i link per invitare l’utente ad effettuare il login o a registrarsi all’interno del sito.

\subsubsection{Inserimento Commento}\label{subsec:commento}
Sono state inoltre sviluppati codici che consentono all’utente di inserire dei propri commenti per gli algoritmi presenti nel sistema.

\subsubsection{Inserimento Voto}\label{subsec:voto}
E' possibile inserire un voto per ogni algoritmo, un utente può decidere di cambiare il proprio voto rivotando dalla pagina apposita. I voti hanno un valore da 1 a 5 e questo viene controllato tramite lo script Perl che si occupa di inserire i voti.

\subsubsection{Inserimento Algoritmo}\label{subsec:algoritmo}
Se l’utente è loggato questo ha la possibilità di inserire un nuovo algoritmo all’interno del sistema. Nelle pagine del forum è disponibile un link che indirizzi l'utente al form di inserimento.\\
Come per la fase di registrazione, anche qui sono presenti dei controlli sui caratteri inseriti dall'utente, in modo da vietare i caratteri proibiti. Quando l'utente inserisce uno di questi caratteri viene visualizzato un messaggio di errore vicino il relativo campo di input.
Quando l'utente riempie i campi necessari nel modo corretto, il nuovo algoritmo viene inserito all'interno del file "Algorithms.xml", e il sistema viene reindirizzato automaticamente alla pagina dove viene visualizzato tale algoritmo.

\subsubsection{Forum}\label{subsec:forum}
La pagina del forum nella quale è possibile visualizzare tutti gli algoritmi appartenenti ad una sottocategoria, viene creata normalmente tramite un XSLT. Va fatto però un accorgimento particolare per la creazione del breadcrumb in questa pagina, in quanto viene creato dinamicamente tramite Perl con l'utilizzo di espressioni regolari. Nel file "PageHeader.xml", il nodo relativo a questa pagina, contiene nel tag <title> un marcatore, che viene sostituito, nello script Perl, con il nome della categoria e sottocategoria relativa alla pagina.\\
La stessa tecnica viene utilizzata nella pagina di visualizzazione di un algoritmo per modificare il breadcrumb in modo che appaia il percorso relativo a quell'algoritmo, quindi il nome della categoria, sottocategoria e nome dell'algoritmo.